package com.sxj.corejava.code07_面向对象.租车系统;

import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2025年01月07日
 */
public class Test {

    public static void main(String[] args) {
        showMenu();
    }

    public static void showMenu() {
        // 1.进入租车系统,输入客户信息
        System.out.println("*******************欢迎来到紫金租车店*******************");
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入客户姓名:");
        String name = sc.next();
        System.out.print("请输入客户手机号码:");
        String phone = sc.next();
        Customer customer = new Customer(name, phone);

        // 2.选择需要租赁的汽车类型(轿车、客车、退出)以及具体的车型(根据选择的类型不同展示不同的车型)
        // 租车时可以租赁多辆汽车
        // 准备一个机动车数组,用于存储所有租赁的机动车,由于不确定具体租赁了几辆
        // 因此数组长度可以放的很大,确保用于租赁的车辆数量不会超过该长度
        MotorVehicle[] vehicles = new MotorVehicle[100];
        // 指定机动车数组的初始下标,主要用于标记共租赁了几辆车
        int index = 0;


        while (true) {
            System.out.print("请选择需要租赁的机动车类型(1.轿车 2.客车 3.退出):");
            int choice = sc.nextInt();
            if (choice == 1) {
                System.out.print("请选择轿车型号(1.宝马X1 2.奔驰GLC 3.保时捷帕拉梅拉 4.劳斯莱斯幻影):");
                int num = sc.nextInt();
                switch (num) {
                    case 1:
                        // 由于租车时无法确定租的是轿车还是客车,因此统一通过多态实现
                        MotorVehicle vehicle = new Car("苏A00001", "宝马", CarConstant.BMW_X1);
                        vehicles[index++] = vehicle;
                        break;
                    case 2:
                        vehicles[index++] = new Car("苏A00002", "奔驰", CarConstant.BENZ_GLC);
                        break;
                    case 3:
                        vehicles[index++] = new Car("苏A00003", "保时捷", CarConstant.PORSCHE_PANAMERA);
                        break;
                    case 4:
                        vehicles[index++] = new Car("苏A00004", "劳斯莱斯", CarConstant.ROLLS_ROYCE_PHANTOM);
                        break;
                    default:
                        System.out.println("错误:您输入的选项有误,请重新输入!");
                        break;
                }
            } else if (choice == 2) {
                System.out.print("请选择客车型号(1.20座考斯特 2.25座奔驰凌特 3.35座宇通客车 4.45座金龙客车):");
                int num = sc.nextInt();
                switch (num) {
                    case 1:
                        vehicles[index++] = new Bus("苏A00005", "考斯特", 20);
                        break;
                    case 2:
                        vehicles[index++] = new Bus("苏A00006", "奔驰", 25);
                        break;
                    case 3:
                        vehicles[index++] = new Bus("苏A00007", "宇通", 35);
                        break;
                    case 4:
                        vehicles[index++] = new Bus("苏A00008", "金龙", 45);
                        break;
                    default:
                        System.out.println("错误:您输入的选项有误,请重新输入!");
                        break;
                }
            } else if (choice == 3) {
                break;
            } else {
                System.out.println("错误:您输入的选项有误,请重新输入!");
            }
        }

        // 3.车辆选择完成之后指定租赁的天数,所有租赁的机动车租赁时间相同
        System.out.print("请输入租赁的天数:");
        int day = sc.nextInt();
        // 4.展示客户租赁的所有车辆的车牌与品牌信息
        System.out.println("-----------------------------------------------");
        System.out.println("恭喜" + customer.getName() + "客户租车成功,您租赁的机动车信息如下:");
        System.out.println("车牌\t\t品牌");
        // 由于客户共租赁了index辆机动车,因此遍历的时候通过index实现,不能遍历整个数组
        // 数组中并不是所有元素都有值
        // 定义一个变量,用于接收总租金
        int money = 0;
        for (int i = 0; i < index; i++) {
            System.out.println(vehicles[i].getNo() + "\t\t" + vehicles[i].getBrand());
            money += vehicles[i].rent(day);
        }
        System.out.println("-----------------------------------------------");
        // 5.打印共租赁了几辆机动车,租赁了多少天,总租金多少元
        System.out.println(customer.getName() + "共租赁了" + index + "辆机动车,租赁了" + day + "天,总租金:" + money + "元");
    }
}
